/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package multiface.awwadco.jpa;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.Lob;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author Diego64
 */
@Entity
@Table(name = "prodotto")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Ricambio.findAll", query = "SELECT p FROM Prodotto p WHERE p.ricambio=true ORDER BY p.dataora DESC"),
    @NamedQuery(name = "Prodotto.findAll", query = "SELECT p FROM Prodotto p WHERE p.ricambio=false ORDER BY p.dataora DESC"),
    @NamedQuery(name = "Prodotto.findByIdprodotto", query = "SELECT p FROM Prodotto p WHERE p.idprodotto = :idprodotto"),
    @NamedQuery(name = "Prodotto.findByNome", query = "SELECT p FROM Prodotto p WHERE p.nome = :nome"),
    @NamedQuery(name = "Prodotto.findByDataora", query = "SELECT p FROM Prodotto p WHERE p.dataora = :dataora"),
    @NamedQuery(name = "Prodotto.findByAnno", query = "SELECT p FROM Prodotto p WHERE p.anno = :anno"),
    @NamedQuery(name = "Prodotto.findByCodice", query = "SELECT p FROM Prodotto p WHERE p.codice = :codice"),
    @NamedQuery(name = "Prodotto.findByPrezzo", query = "SELECT p FROM Prodotto p WHERE p.prezzo = :prezzo"),
    @NamedQuery(name = "Prodotto.findByStato", query = "SELECT p FROM Prodotto p WHERE p.stato = :stato"),
    @NamedQuery(name = "Prodotto.findByVisualizzazioni", query = "SELECT p FROM Prodotto p WHERE p.visualizzazioni = :visualizzazioni"),
    @NamedQuery(name = "Prodotto.findByRicambio", query = "SELECT p FROM Prodotto p WHERE p.ricambio = :ricambio"),
    @NamedQuery(name = "Prodotto.findByOfferta", query = "SELECT p FROM Prodotto p WHERE p.offerta = :offerta"),
    @NamedQuery(name = "Prodotto.findByHomepage", query = "SELECT p FROM Prodotto p WHERE p.homepage = :homepage"),
    @NamedQuery(name = "Prodotto.findByMoneta", query = "SELECT p FROM Prodotto p WHERE p.moneta = :moneta"),
    @NamedQuery(name = "Prodotto.findByVisibilePrezzo", query = "SELECT p FROM Prodotto p WHERE p.visibilePrezzo = :visibilePrezzo"),
    @NamedQuery(name = "Prodotto.findByPezziMagazzino", query = "SELECT p FROM Prodotto p WHERE p.pezziMagazzino = :pezziMagazzino"),
    @NamedQuery(name = "Prodotto.findByVenduto", query = "SELECT p FROM Prodotto p WHERE p.venduto = :venduto"),
    @NamedQuery(name = "Prodotto.findByVisibileRelazione", query = "SELECT p FROM Prodotto p WHERE p.visibileRelazione = :visibileRelazione"),
    @NamedQuery(name = "Prodotto.findByModello", query = "SELECT p FROM Prodotto p WHERE p.modello = :modello"),
    @NamedQuery(name = "Prodotto.findByCondizioni", query = "SELECT p FROM Prodotto p WHERE p.condizioni = :condizioni")})
public class Prodotto implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "idprodotto")
    private Integer idprodotto;
    @Basic(optional = false)
    @Column(name = "nome")
    private String nome;
    @Lob
    @Column(name = "descrizione")
    private String descrizione;
    @Basic(optional = false)
    @Column(name = "dataora")
    @Temporal(TemporalType.TIMESTAMP)
    private Date dataora;
    @Column(name = "anno")
    private String anno;
    @Basic(optional = false)
    @Column(name = "codice")
    private String codice;
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Column(name = "prezzo")
    private BigDecimal prezzo;
    @Basic(optional = false)
    @Column(name = "stato")
    private String stato;
    @Basic(optional = false)
    @Column(name = "visualizzazioni")
    private long visualizzazioni;
    @Basic(optional = false)
    @Column(name = "ricambio")
    private boolean ricambio;
    @Basic(optional = false)
    @Column(name = "offerta")
    private boolean offerta;
    @Basic(optional = false)
    @Column(name = "homepage")
    private boolean homepage;
    @Lob
    @Column(name = "descrizione_homepage")
    private String descrizioneHomepage;
    @Column(name = "moneta")
    private String moneta;
    @Basic(optional = false)
    @Column(name = "visibile_prezzo")
    private boolean visibilePrezzo;
    @Basic(optional = false)
    @Column(name = "pezzi_magazzino")
    private int pezziMagazzino;
    @Basic(optional = false)
    @Column(name = "venduto")
    private boolean venduto;
    @Basic(optional = false)
    @Column(name = "visibile_relazione")
    private boolean visibileRelazione;
    @Basic(optional = false)
    @Column(name = "modello")
    private String modello;
    @Basic(optional = false)
    @Column(name = "condizioni")
    private String condizioni;
    @JoinTable(name = "prodotto_has_ricambio", joinColumns = {
        @JoinColumn(name = "prodotto_idprodotto", referencedColumnName = "idprodotto")}, inverseJoinColumns = {
        @JoinColumn(name = "prodotto_idricambio", referencedColumnName = "idprodotto")})
    @ManyToMany
    private List<Prodotto> prodottoList;
    @ManyToMany(mappedBy = "prodottoList")
    private List<Prodotto> prodottoList1;
    @JoinColumn(name = "categoria_idcategoria", referencedColumnName = "idcategoria")
    @ManyToOne(optional = false)
    private Categoria categoriaIdcategoria;
    @OneToMany(mappedBy = "prodotto")
    private List<News> newsList;
    @OneToMany(mappedBy = "prodottoIdprodotto")
    private List<File> fileList;

    public Prodotto() {
    }

    public Prodotto(Integer idprodotto) {
        this.idprodotto = idprodotto;
    }

    public Prodotto(Integer idprodotto, String nome, Date dataora, String codice, String stato, long visualizzazioni, boolean ricambio, boolean offerta, boolean homepage, boolean visibilePrezzo, int pezziMagazzino, boolean venduto, boolean visibileRelazione, String modello, String condizioni) {
        this.idprodotto = idprodotto;
        this.nome = nome;
        this.dataora = dataora;
        this.codice = codice;
        this.stato = stato;
        this.visualizzazioni = visualizzazioni;
        this.ricambio = ricambio;
        this.offerta = offerta;
        this.homepage = homepage;
        this.visibilePrezzo = visibilePrezzo;
        this.pezziMagazzino = pezziMagazzino;
        this.venduto = venduto;
        this.visibileRelazione = visibileRelazione;
        this.modello = modello;
        this.condizioni = condizioni;
    }

    public Integer getIdprodotto() {
        return idprodotto;
    }

    public void setIdprodotto(Integer idprodotto) {
        this.idprodotto = idprodotto;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getDescrizione() {
        return descrizione;
    }

    public void setDescrizione(String descrizione) {
        this.descrizione = descrizione;
    }

    public Date getDataora() {
        return dataora;
    }

    public void setDataora(Date dataora) {
        this.dataora = dataora;
    }

    public String getAnno() {
        return anno;
    }

    public void setAnno(String anno) {
        this.anno = anno;
    }

    public String getCodice() {
        return codice;
    }

    public void setCodice(String codice) {
        this.codice = codice;
    }

    public BigDecimal getPrezzo() {
        return prezzo;
    }

    public void setPrezzo(BigDecimal prezzo) {
        this.prezzo = prezzo;
    }

    public String getStato() {
        return stato;
    }

    public void setStato(String stato) {
        this.stato = stato;
    }

    public long getVisualizzazioni() {
        return visualizzazioni;
    }

    public void setVisualizzazioni(long visualizzazioni) {
        this.visualizzazioni = visualizzazioni;
    }

    public boolean getRicambio() {
        return ricambio;
    }

    public void setRicambio(boolean ricambio) {
        this.ricambio = ricambio;
    }

    public boolean getOfferta() {
        return offerta;
    }

    public void setOfferta(boolean offerta) {
        this.offerta = offerta;
    }

    public boolean getHomepage() {
        return homepage;
    }

    public void setHomepage(boolean homepage) {
        this.homepage = homepage;
    }

    public String getDescrizioneHomepage() {
        return descrizioneHomepage;
    }

    public void setDescrizioneHomepage(String descrizioneHomepage) {
        this.descrizioneHomepage = descrizioneHomepage;
    }

    public String getMoneta() {
        return moneta;
    }

    public void setMoneta(String moneta) {
        this.moneta = moneta;
    }

    public boolean getVisibilePrezzo() {
        return visibilePrezzo;
    }

    public void setVisibilePrezzo(boolean visibilePrezzo) {
        this.visibilePrezzo = visibilePrezzo;
    }

    public int getPezziMagazzino() {
        return pezziMagazzino;
    }

    public void setPezziMagazzino(int pezziMagazzino) {
        this.pezziMagazzino = pezziMagazzino;
    }

    public boolean getVenduto() {
        return venduto;
    }

    public void setVenduto(boolean venduto) {
        this.venduto = venduto;
    }

    public boolean getVisibileRelazione() {
        return visibileRelazione;
    }

    public void setVisibileRelazione(boolean visibileRelazione) {
        this.visibileRelazione = visibileRelazione;
    }

    public String getModello() {
        return modello;
    }

    public void setModello(String modello) {
        this.modello = modello;
    }

    public String getCondizioni() {
        return condizioni;
    }

    public void setCondizioni(String condizioni) {
        this.condizioni = condizioni;
    }

   @XmlTransient
    public List<Prodotto> getRicambioList() {
        return prodottoList;
    }

    public void setRicambioList(List<Prodotto> prodottoList) {
        this.prodottoList = prodottoList;
    }

    @XmlTransient
    public List<Prodotto> getProdottoList() {
        return prodottoList1;
    }

    public void setProdottoList(List<Prodotto> prodottoList1) {
        this.prodottoList1 = prodottoList1;
    }

    public Categoria getCategoriaIdcategoria() {
        return categoriaIdcategoria;
    }

    public void setCategoriaIdcategoria(Categoria categoriaIdcategoria) {
        this.categoriaIdcategoria = categoriaIdcategoria;
    }

    @XmlTransient
    public List<News> getNewsList() {
        return newsList;
    }

    public void setNewsList(List<News> newsList) {
        this.newsList = newsList;
    }

    @XmlTransient
    public List<File> getFileList() {
        return fileList;
    }

    public void setFileList(List<File> fileList) {
        this.fileList = fileList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idprodotto != null ? idprodotto.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Prodotto)) {
            return false;
        }
        Prodotto other = (Prodotto) object;
        if ((this.idprodotto == null && other.idprodotto != null) || (this.idprodotto != null && !this.idprodotto.equals(other.idprodotto))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "multiface.awwadco.jpa.Prodotto[ idprodotto=" + idprodotto + " ]";
    }
    
    
    public String getDescrizioneHomepage(int max) {
        if (this.getDescrizioneHomepage() == null) {
            return null;
        }

        if (this.getDescrizioneHomepage().length() > max) {
            return (this.getDescrizioneHomepage().substring(0, max) + "...");
        } else {
            return (this.getDescrizioneHomepage());
        }
    }

    public String getDescrizione(int max) {
        if (this.getDescrizione() == null) {
            return null;
        }
        if (this.getDescrizione().length() > max) {
            return (this.getDescrizione().substring(0, max) + "...");
        } else {
            return (this.getDescrizione());
        }
    }
    
}
